A data processing device can communicate with another device via a physical communication link. To provide varying service levels for different communications and to avoid deadlock and other communication errors, the data processing device can associate the physical communication link with a number of virtual channels, and communicate packets via the virtual channels. Packets in different virtual channels may be reordered, and separate resources are allocated to the various virtual channels to prevent them from blocking each other. Flow control information is sent across the communications link to indicate the status of these resources to the other communicating device, allowing the other device to manage in which channels packets are sent.
In some cases, it is desirable for a data processing device to be able to support more virtual channels internally than are provided on the physical communications link. This allows more flexibility in packet reordering, and handling of priorities among more types of traffic than the physical communications link may recognize. Additional virtual channels can be supported by mapping a single link virtual channel to multiple internal virtual channels, based on the contents of the packets. Flow control information is typically sent on a link virtual channel basis, so the internal virtual channels are invisible at the link level. In order to reduce the likelihood of communication blockage between the virtual channels, it is desirable that, support for the mapping exist in both the transmitting and receiving device. Accordingly, the receiving device can support mapping by providing resources to the internal virtual channels that map from the single link virtual channel. In some devices, the full amount of communication resources associated with the link virtual channel are allocated to each single virtual channel. While this reduces the likelihood of an overflow, as each internal virtual channel can sink all the packets associated with the link virtual channel, it can be inefficient, as the total number of packets received cannot exceed the resources allotted to a single virtual channel.